#include "fecha.h"

Fecha :: Fecha (){
    dia = 1;
    mes = 1;
    anio = 1950;
}

Fecha :: Fecha (int d, int m, int a){
    dia = d;
    mes = m;
    anio = a;
}

Fecha :: Fecha (const Fecha &otra){
    dia = otra.dia;
    mes = otra.mes;
    anio = otra.anio;
}

int Fecha :: getDia (){
    return dia;
}

int Fecha :: getMes (){
    return mes;
}

int Fecha :: getAnio (){
    return anio;
}

void Fecha :: SumaUnDia(){
    switch(mes){
        case 1:		case 3:     case 5:		case 7:
        case 8:		case 10:
            if (dia == 31){
                dia = 1;
                mes++;
            }
            else
                dia++;
            break;
        case 4:		case 6:		case 9:		case 11:
            if (dia==30){
                dia = 1;
                mes++;
            }
            else
                dia++;
            break;
        case 2:
            if(anio%4==0){
                if(dia==29){
                    dia = 1;
                    mes++;
                }
                else
                    dia++;
            }else{
                if(dia==28){
                    dia = 1;
                    mes++;
                }
                else
                    dia++;
            }
            break;
        case 12:
            if (dia == 31){
                dia = 1;
                mes = 1;
                anio++;
            }
            else
                dia++;
            break;
        default:;
    }
}

bool Fecha :: operator< (Fecha otra){
    bool esMenor = false;
    if (anio < otra.anio)
        esMenor = true;
    else{
        if (anio == otra.anio){
            if (mes < otra.mes)
                esMenor = true;
            else
                if (dia < otra.dia)
                    esMenor = true;
        }
    }
    return esMenor;
}

bool Fecha :: operator==(Fecha otra){
    if ((anio == otra.anio) && (mes == otra.mes) && (dia == otra.dia))
        return true;
    else
        return false;
}

Fecha Fecha :: operator++(){
    SumaUnDia();
    return (*this);
}

Fecha Fecha :: operator++(int){
    Fecha temp = (*this);
    SumaUnDia();
    return (temp);
}

Fecha Fecha :: operator+(int dias){
    Fecha temp = (*this);
    int i;
    for (i=0;i<dias;i++)
        temp++;
    return temp;
}

int Fecha :: operator-(Fecha otra){
    Fecha temp = (*this);
    int dias=0;
    if (temp<otra){
        while (temp<otra){
            temp++;
            dias++;
        }
    }
    else{
        while (otra<temp){
            otra++;
            dias++;
        }
    }
    return dias;
}

bool Fecha :: esValida(){
    bool valida=false;
	if(anio>=1900){
	    switch(mes){
	        case 1:		case 3:     case 5:		case 7:
	        case 8:		case 10:	case 12:
	            if(dia>=1&&dia<=31)
	                valida=true;
	            break;
	        case 4:		case 6:		case 9:		case 11:
	            if(dia>=1&&dia<=30)
	                valida=true;
	            break;
	        case 2:
	            if(anio%4==0){
	                if(dia>=1&&dia<=29)
	                    valida=true;
	            }else{
	                if(dia>=1&&dia<=28)
	                    valida=true;
	            }
				break;
	        default:;
	    }
	}
    return valida;
}

void Fecha :: setFecha(int d,int m,int a){
    dia = d;
    mes = m;
    anio = a;
}
